#include <iostream>
#include <signal.h>
#include <unistd.h>
using namespace std;
void show_pending(const sigset_t &pending)
{
    for (int signo = 31; signo >= 1; signo--)
    {
        if (sigismember(&pending, signo))
        {
            cout << "1";
        }
        else
            cout << "0";
    }
    cout << "\n";
}
int main()
{
    sigset_t isig, osig, pending;
    // 初始化输入信号集
    sigemptyset(&isig);
    // 输入信号集添加2号信号
    sigaddset(&isig, SIGINT);
    // 屏蔽二号信号
    sigprocmask(SIG_SETMASK, &isig, &osig);
    int cnt = 5;
    while (1)
    {
        // 获取pending位图
        sigpending(&pending);
        // 打印pend位图
        show_pending(pending);
        sleep(1);
        --cnt;
        // 5秒后解除阻塞
        if (cnt == 0)
        {
            // 解除阻塞
            cout << "解除对信号的屏蔽" << endl;
            sigprocmask(SIG_SETMASK, &osig, &isig);
        }
    }
    return 0;
}